home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / xobbs.arc / xodir.c < prev    next >
C/C++ Source or Header  |  1989-05-03  |  2KB  |  89 lines

  1. /* XODIR.C Directory routines for XOBBS. Jim Durham, W2XO 10-24-88 */
  2. /* Version 1.0 */
  3. /* Code released to the amateur radio community */
  4.  
  5. #include "xobbs.h"
  6.  
  7. getdirc(fp)        /*get chars from directory pipe, throwing away*/
  8.     FILE *fp;    /* newlines*/
  9. {
  10.     int c;
  11.     c=getc(fp);
  12.     if(c == '\n')
  13.         c=getc(fp);
  14.     return c;
  15. }
  16. getdirent(fp,s,t)
  17.     FILE *fp;
  18.     char *s,*t;
  19. {
  20.     int c;
  21.     char *cp;
  22.     
  23.     c=getdirc(fp);    /*throw away blank*/
  24.     cp=s;        /*point to first string*/
  25.     *cp='\0';
  26.     while((c=getdirc(fp)) != ' ')
  27.         *cp++=c;
  28.     *cp='\0';
  29.  
  30.     cp=t;
  31.     *cp='\0';    
  32.  
  33.     while(((c=getdirc(fp)) != ',') && (c != EOF))
  34.         *cp++=c;
  35.     *cp='\0';
  36.     if(c==EOF)
  37.         return 0;
  38.     else
  39.         return 1;
  40. }
  41.  
  42. dodir(path,mode)
  43.     char *path;
  44.     int mode;
  45. {
  46.     FILE *fp;
  47.     char cmdstr[40],tempstr[10],temp2str[15];
  48.     int cnt,c,siz;
  49.  
  50.     sprintf(cmdstr,"ls -sm %s",lowcase(path));
  51.     fp=popen(cmdstr,"r");                   /*open the pipe from ls*/
  52.  
  53.     while((c=getc(fp)) != EOF && c != ','); /*ratchet past the "Total xx" */
  54.     if(c == EOF) return;
  55.     cnt=0;                          /*set entries/line count to 0 */
  56.  
  57.     for(;;){
  58.  
  59.     if(getdirent(fp,tempstr,temp2str) == 0) break;
  60.     if(mode == 0)
  61.         sprintf(prinbuf,"|%-14s      |",temp2str);
  62.     else{
  63.             siz = atoi(tempstr);
  64.             if(siz < 2)
  65.                 siz = 2;
  66.             sprintf(prinbuf,"|%-14s %4dK| ",temp2str,siz/2);
  67.         }
  68.         prinout(NOFLUSH);
  69.     if(cnt++ == 2)
  70.     {
  71.         sprintf(prinbuf,"\n");
  72.         prinout(NOFLUSH);
  73.         cnt=0;
  74.     }
  75.     } 
  76.     if(mode == 0)
  77.         sprintf(prinbuf,"|%-14s      |\n",temp2str);
  78.     else{
  79.         siz = atoi(tempstr);
  80.         if(siz < 2)
  81.             siz = 2;
  82.         sprintf(prinbuf,"|%-14s %4dK| \n",temp2str,siz/2);
  83.     }
  84.  
  85.     prinout(FLUSH);
  86.     pclose(fp);
  87. }    
  88.  
  89.